Marcelino Mayorga Quesada

RNN Optimization

Obtención de los datos y pre-processing

Consideraciones iniciales

Análisis de resultados


1. Unidades de activación

En este ejercicio, vamos a evaluar la importancia de utilizar las unidades de activación adecuadas. Las funciones de activación como sigmoid han dejado de utilizarse en favor de otras unidades como ReLU.

Comparativa de imágenes de funciones de activación

Ejecución Comparativa: Sigmoide vs Relu

Definición de métodos utilizando base el caso de la actividad 1 con las caracteristicas sugeridas.

Ejecución con función de activiación de Sigmoide

Ejecución con función de activiación de Relu

Ejecución con función de activiación de Leaky Relu


Análisis comparativo - Loss: Sigmoid vs Relu

Análisis comparativo - Accuracy: Sigmoid vs Relu

Análisis comparativo - Accuracy: Relu vs LeakyRelu

Mayores Diferencias y breve explicación


2. Inicialización de parámetros

Vamos a evaluar la importancia de una correcta inicialización de parámetros en una red neuronal.

Partiendo de una red similar a la del ejercicio anterior (usando ya ReLUs), comentar las diferencias que se aprecian en el entrenamiento al utilizar distintas estrategias de inicialización de parámetros. Para ello, inicializar todas las capas con las siguientes estrategias, disponibles en Keras, y analizar sus diferencias:

Consideraciones al lector:

Definimos la función base para entrenar

Inicialización con Ceros (Zeros)

Todos los pesos son inicializados con ceros.

Inicialización con una variable aleatoria normal (Random Normal)

Pesos son inicializados a una valores aleatores Gaussianos (media cero y distribución estandard de 0.5).

Inicialización con los valores por defecto de Keras para una capa Dense (estrategia glorot uniform)

Pesos son inicializados a valores aleatorios uniformemente pequeños entre 0 y 0.5(parametrizable), se le conoce como "Xavier Uniform".

Inicialización con HeUniform

Inicialización con RandomUniform


Comparación de Loss y Accuracy: Zero vs RandomNorm vs GlorotUnit vs HeUniformed

Por la topografía de la red neuronal que estamos utilizando, inicialización de ceros utilizando RELU, hace dificil a la red aprender, si hacemos unos ajustes en el learning rate y en la activación a Sigmoide, vemos mejoras con la inicialización en cero pero aún no se acerca al rendimiento de las otras inicializaciones.

Volvemos a generar la visualización:

Resumen Media de Accuracy/Loss ordenados por Accuracy en entrenamiento

Diferencias / Conclusiones

Continuaremos con la que se utiliza por defecto Random Normal.

Aqui hay detalle de las diferencias en accuracy, convergencia, generalización, etc


3. Optimizadores

Partiendo de una red similar a la del ejercicio anterior (utilizando la mejor estrategia de inicialización observada), comparar y analizar las diferencias que se observan al entrenar con varios de los optimizadores vistos en clase, incluyendo SGD como optimizador básico (se puede explorar el espacio de hiperparámetros de cada optimizador, aunque para optimizadores más avanzados del estilo de adam y RMSprop es buena idea dejar los valores por defecto provistos por Keras).

Optimizando con Stochastic Gradient Descent(SGD)

Proporciona frecuente actualizaciones de pesos con alta varianza por cada muestra, hace que la función fluctúe, para controlar los minimos locales. Utiliza momentum para acelerar la correción. Nesterov es una mejora de la implementación de momentum que le dá dirección sobre la pendiente.

Optimizando con Stochastic Gradient Descent - Adaptive Estimation (ADAM)

Es una optimización del algortimo del stocastic gradiente descent(SGD) para actualizar pesos de la red iterativamente basado en el entrenamiento de data. Mantiene un learning rate(alpha rate) separado. Toma las bondadades de RMSDrop y AdaGrad.

Optimizando con Gradient Descent - ADAM en Norma Infinita (ADAMAX)

Es una variante de ADAM basado en la normal infinita.

Optimizando con Gradient Descent - Adadelta Adaptive Learning rate per dimension (ADADELTA)

No utiliza learning rate y refiere a la diferencia entre el peso actual y el nuevo peso actualizado.

Optimizando con Gradient Descent - Adadelta Parameter-Specific Learning (ADAGRAD)

Adagrad adapta el learning rate individual por feature utilizado.

Optimizando con Gradient Descent - Root MeanSquared Propagation(RMSDROP) Extensión del Adagrad, en vez de acumular momentum acumula gradientes por momentum.

Generamos visualización:

Diferencias / Conclusiones


4. Regularización y red final

Vamos entrenar una red final que sea capaz de obtener una accuracy en el validation set cercana al 90%. Para ello, combinar todo lo aprendido anteriormente y utilizar técnicas de regularización para evitar overfitting. Algunos de los elementos que pueden tenerse en cuenta son los siguientes.

Se proponen dos estrategias para llegar al 90% accuracy utilizando:

Estrategia e Hyperparámetros utilizados sin Redes Convolucionales

Configuración e Hyperparámetros utilizados con Convolucionales

Early Stop y Regularization(L1,L2,L1|L2)

Entrenamiento Sin Early Stop

Entrenamiento con Early Stop

Entrenamiento con Regularización con L1 (con Early Stop)

Entrenamiento con Regularización con L2 (con Early Stop)

Entrenamiento con Regularización con L1/L2 (con Early Stop)

Generamos Visualización y comparamos resultados

Observamos que utilizar redes convolucionales mejora el rendimiento en accuracy/loss con menor cantidad de epoch y lo visualizamos su estructura y resultados:

Evaluación del modelo en datos de test

Una vez elegido el que creemos que es nuestro mejor modelo a partir de la estimación que hemos visto en los datos de validación, es hora de utilizar los datos de test para ver cómo se comporta nuestro modelo ante nuevos datos. Si hemos hecho bien las cosas, este número debería ser parecido al valor de nuestra estimación vista en los datos de validación.

Resultado Sin Redes Convolucionales Usando el modelo "Early Stop" para obtener su Test Accuracy y Test Loss

Resultado con Redes convolucionales

Pruebas

Tomamos las predicciones y las probabilidades:

Se crea lista que tiene los nombres de las clases. Dada que la última capa es softmax obtenemos la probabilidad de cada clase y se obtiene el mayor para determinar su clase.

Visualizamos y comparamos muestras